package net.freestu.sola.web.parser.Parse;

import java.io.File;

import net.freestu.sola.web.global.ConfigReader;
import net.freestu.sola.web.global.GlobleVar;
import net.freestu.sola.web.global.TimeLimitThread;
import net.freestu.sola.web.parser.Parse.Globle.GlobleVarOfParseSystem;
import net.freestu.sola.web.util.FileManager;


public class ParseSystem{
	
	/**
	 * 参数应该是
	 * config.xml 时间
	 * @param args
	 */
	public static void main(String[] args){
        
	    //String work_place="D:\\工作室收藏\\编程工作室\\JAVA区\\Java程序调试区\\搜索引擎\\workspace\\Work_Place";
		//String work_place=args[0];//工作区
		//String School=args[1];//"成都理工大学";
		//String Site=null;
		
//*****************对参数进行处理******************
		File f=null;
		long maxtime=0;
		try {
			f = new File(args[0]);
			maxtime = Long.valueOf(args[1]);
		} catch (Exception e) {
		    System.out.println("参数出现错误,检查参数!!!!");
		}
		ConfigReader cr=new ConfigReader(f);
		new TimeLimitThread(maxtime).start();//开始记时.
//***************************************************		
		 String work_place=GlobleVar.WORKPLACE;//??这里怎可能嘛??
		 String School=GlobleVar.SCHOOL;
		 String Site=GlobleVar.SITE;
		
//****************初始化和进行第一次更新*****************		

		init();//进行初始化.
		firstUpdateForward();//判断站点更新情况.
		
//***************************************************		
		
		
//**************启动分析主程序***************************		
		File crawlfolder=new File(work_place,School+File.separator
				+Site+File.separator+"Crawl Folder");
		File[] sites=crawlfolder.listFiles();
		
		//这里是进行依次循环导入,避免数据量太大而导致内存不够使用.
		for(int i=0;i<sites.length;i++){
		   
	       File ff=sites[i];
	       //cleanXml(ff);//将这个里面的.xml文件删除.先不使用.
	       String name=ff.getName();
	       File xmlf=new File(work_place+File.separator+School+
	    		   File.separator+Site+File.separator+"XmlData Folder");
	       
	       
	       
		   UpdateParse up=new UpdateParse(name,crawlfolder,School,xmlf,work_place);
		   up.start();
		 }
//******************************************************		
     }
	
	
    /**
     * 生成update Folder文件夹和在其之下的
     * ADD,UPDATE,DELETE
     */
	static void init(){
		
		
		 String work_place=GlobleVar.WORKPLACE;
		 String School=GlobleVar.SCHOOL;
		 String Site=GlobleVar.SITE;
		
		//1.生成Update Folder文件夹
		File update_folder=new File(GlobleVarOfParseSystem.UPDATE_FOLDER);
		
		if(update_folder.exists()){//如果初始化则将其删除.
			
			FileManager.deleteDirAllFiles(GlobleVarOfParseSystem.UPDATE_FOLDER);
		}
			FileManager.buildDir(GlobleVarOfParseSystem.UPDATE_FOLDER);
			FileManager.buildDir(GlobleVarOfParseSystem.UPDATE_FOLDER,"ADD");
			FileManager.buildDir(GlobleVarOfParseSystem.UPDATE_FOLDER,"DELETE");
			FileManager.buildDir(GlobleVarOfParseSystem.UPDATE_FOLDER,"UPDATE");
		
		
		// 2.去除XmlFolder里面的.xml文件,保留OldLink2MD5,主要是避免异常中断而开始产生的一些垃圾文件.

		File xmlfolder = new File(work_place, School + File.separator + Site
				+ File.separator + "XmlData Folder");
		
		if(!xmlfolder.exists()) 
			return;
		
		File[] f =xmlfolder.listFiles();//www.lib.cdut.edu.cn文件夹.
		
		for(int k=0;k<f.length;k++){
			try {
				cleanXml(f[k]);
			} catch (Exception e) {//这里可能出现数组越界的情况.
				break;
			}
		}
	}
	/**
	 * 清除xmlfolder里面的以.xml为结尾的文件，
	 * 这个类的目的是为了避免程序异常中断也引起的遗留文件.
	 * dir: www.lib.cdut.edu.cn
	 */
	static void cleanXml(File dir){
		
		File[] files = dir.listFiles();

		for(int i=0;i<files.length;i++){
			
			File f=null;
			try {
				f = files[i];
			} catch (ArrayIndexOutOfBoundsException e) {
				return;
			}
			if(f.getName().endsWith(".xml")){
				f.delete();
			}
		}
	}
	
	static void firstUpdateForward(){
		
		
		 String work_place=GlobleVar.WORKPLACE;
		 String School=GlobleVar.SCHOOL;
		 String Site=GlobleVar.SITE;
		
		File xmlfolder = new File(work_place, School + File.separator + Site
				+ File.separator + "XmlData Folder");
		
		if(!xmlfolder.exists())//如果是第一则不会有xmlData Folder. 
			return;
		
		SiteDeleteParse sdp=new SiteDeleteParse();
		/*
		try {
			System.out.println("执行到这里1");
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		sdp.exe();
		
	}
}